home *** CD-ROM | disk | FTP | other *** search
- ;-----------------------------------------------------------------------
- ;
- ; USFUL MACROS FOR YOUR PROTECTED MODE PROGRAM
- ;
- ; Writen By Adam Seychell
- ;
- ;They include
- ;
- ; FILE I/O:
- ; OPEN_FILE f#,'filename'
- ; READ_FILE f#, segment ,
- ;
- ;
- ;-----------------------------------------------------------------------
-
-
-
-
-
-
-
- ;-----------------------------------------------------------------------
- ; OPEN FILE
- ; Open <path\filename>
- ;-----------------------------------------------------------------------
- Open macro X, FileName , nameSEG , nameOFS
-
- DATA32 SEGMENT PUBLIC USE32
- file_to_open&X db FileName,0
- FileHandle&X dw 0
- ENDS
- IFB <nameSEG>
- mov ss:Real_DS,DATA32
- lea dx,file_to_open&X ; DS:DX points to file name
- ELSE
- mov ax,nameSEG
- mov ss:Real_DS,ax
- mov dx,nameOFS
- ENDIF
- mov ax,3D02h ; open a file function
- dosint 21h
- mov FileHandle&X , AX
- endm
-
-
-
-
- ;-----------------------------------------------------------------------
- ; CREATE FILE
- ; create_file <path\filename>
- ;-----------------------------------------------------------------------
- Create macro X, FileName , nameSEG , nameOFS
- DATA32 SEGMENT PUBLIC USE32
- file_to_open&X db FileName,0
- FileHandle&X dw 0
- ENDS
- IFB <nameSEG>
- mov word ptr ss:Real_DS,DATA32
- lea dx,file_to_open&X ; DS:DX points to file name
- ELSE
- mov ax,nameSEG
- mov word ptr ss:Real_DS,ax
- mov dx,nameOFS
- ENDIF
- mov ax,3C02h ; creat a file function
- mov cx,0
- dosint 21h
- mov FileHandle&X , AX
- endm
-
-
-
-
- ;-----------------------------------------------------------------------
- ; CLOSE
- ; close <path\filename>
- ;-----------------------------------------------------------------------
- Close macro X
- mov ah,03Eh ; close a file function
- mov BX,FileHandle&X
- dosint 21h
- endm
-
-
- ;-----------------------------------------------------------------------
- ; READ
- ; read
- ;-----------------------------------------------------------------------
- BlockRead macro X ,BUFFER_SEG, BUFFER_OFS, BYTE_COUNT
- mov BX,FileHandle&X
- mov cx,BYTE_COUNT
- mov dx,offset BUFFER_OFS ; DS:DX points to buffer
- mov ax,BUFFER_SEG
- mov word ptr ss:Real_DS,ax
- mov ah,03Fh ; read_handle file function
- dosint 21h
- endm
-
-
- ;-----------------------------------------------------------------------
- ; WRITE
- ; write_file
- ;-----------------------------------------------------------------------
- BlockWrite macro X ,BUFFER_SEG, BUFFER_OFS, BYTE_COUNT
- mov BX,FileHandle&X
- mov cx,BYTE_COUNT
- mov dx,offset BUFFER_OFS ; DS:DX points to buffer
- mov ax,BUFFER_SEG
- mov word ptr ss:Real_DS,ax
- mov ah,040h ; write handle file function
- dosint 21h
- endm
-
-
- file_SEEK MACRO IT,PLACELO,PLACEHI
- ;SEEK CX:DX = offset from START of new file position
- MOV DX,PLACELO
- MOV CX,PLACEHI
- MOV AH,42H
- MOV AL,0
- MOV BX,FILEHANDLE&IT
- DOSINT 21H
- ENDM
-
-
-
-
-
-
-
-
- Writeln MACRO STRING_,COLOR3_S
- LOCAL TEXT3_S
-
- IFB <COLOR3_S>
- mov ah,07
- ELSE
- MOV AH,COLOR3_S
- ENDIF
-
- push edx
- mov EDX,offset TEXT3_S
- CALL TEXT
- pop edx
- data32 SEGMENT PUBLIC use32
- TEXT3_S DB STRING_,10,13,36
- ends
- ENDM
-
- Write MACRO STRING_, COLOR5_T
- LOCAL TEXT5_T
- IFB <COLOR5_T>
- mov ah,07
- ELSE
- MOV AH,COLOR5_T
- ENDIF
-
- push edx
- MOV EDX,OFFSET TEXT5_T
- CALL TEXT
- pop edx
- data32 SEGMENT PUBLIC use32
- TEXT5_T DB STRING_,36
- ends
- ENDM
-
-
- CRTC equ 3D4h
- SEQ EQU 3C4h
- GC EQU 3CEh
- ATTR EQU 3C0h
-
-
- ;ÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕ
- ; MACROS FOR VGA REGISTERS
- ;ÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕ
-
- inp MACRO port
- mov dx,port ;; Read a byte from port 'port' into al
- in al,dx
- ENDM
-
- outp MACRO port, value
- mov dx,port ;; Write a byte to port 'port'
- mov al,value
- out dx,al
- ENDM
-
- rdindx MACRO port, index
- mov dx,port ;; Read register 'port' index 'index'
- mov al,index
- out dx,al
- inc dx
- in al,dx ;; Result in AL
- ENDM
-
- wrindx MACRO port, index, val
- mov al,index ;; Write 'port' index 'index' with 'val'
- mov ah,val
- mov dx,port
- out dx,ax
- ENDM
-
- modindx MACRO port, index, mask, nvw
- mov dx,port
- mov al,index
- out dx,al
- inc dx
- in al,dx ;; Read the old value
- and al,not mask ;; Mask out bits to be changed
- or al,nvw ;; Or in the changed bits
- out dx,al ;; Write the value back again
- ENDM
-
-